A computer network is a collection of interconnected computing devices that can exchange data and share resources. In a packet-based network, the computing devices communicate data by dividing the data into small blocks called packets, which are individually routed across the network from a source device to a destination device. The destination device extracts the data from the packets and assembles the data into its original form. Dividing the data into packets enables the source device to resend only those individual packets that may be lost during transmission.
Network devices and network links are bounded as to the size of packets or other blocks of data that can be transmitted between two given devices across a given link. This upper-bound is commonly referred to as a “maximum transmission unit” (MTU), also commonly referred to as a “maximum transfer unit.” Network devices and network links are required to be capable of supporting a minimum MTU. However, manufacturers are free to support larger MTUs, and many manufacturers frequently do so.
When a network device (e.g., a network router) receives an Internet Protocol (IP) packet to be forwarded within the network, the network device examines a destination address of the IP packet and selects an outgoing interface to use for forwarding the packet. The outgoing interface has an associated MTU that dictates the maximum size for a packet. If the MTU of the outgoing interface is smaller than the packet size and a “don't fragment” (DF) bit of an IP header within the packet is not set, then the network device may fragment the data of the packet so as to form to packet fragments that are separately routable, where each of the packet fragments conform to the MTU requirements of the outgoing interface. That is, the network device segments the data into two or more segments where each segment is less-than-or-equal-to the MTU less the IP header size. Each segment is then put into its own IP packet having an IP header in which a “total length” field is adjusted to the segment size. A “more fragments” (MF) flag is set for all segments except the last segment, which has the MF flag set to 0, and the “fragment offset” field is set accordingly based on the offset of the segment relative to the original data payload.
In some cases, network devices (such as network routers) may use tunnels to connect with remote networks. Example tunneling protocols include the Generic Routing Encapsulation (GRE) and the Point-to-Point Tunneling Protocol (PPTP). User Datagram Protocol (UDP) may also be used for tunneling. Many conventional applications that utilize these tunneling protocols require only information found in the IP header as part of a tunnel decapsulation route. Consequently, an egress network device for the network tunnel (e.g., an egress router) can easily accept fragmented packets and properly associate the fragmented packets with the network tunnel. That is, each fragmented packet includes a complete copy of the IP header, which provides enough information for the egress network device to properly associate individual fragmented packets with the network tunnel and decapsulate the fragmented packets. However, recently some network communications applications have required tunnels to be defined with additional information that is not always present in the IP header. This precludes fragmented packets from being received over such a tunnel, because the information required to decapsulate the fragmented packet is not included on the IP header of fragmented packets and may not be carried by some fragmented packets such as non-first fragments.